//给你一个长度为 n 的整数数组，请你判断在 最多 改变 1 个元素的情况下，该数组能否变成一个非递减数列。 
//
// 我们是这样定义一个非递减数列的： 对于数组中任意的 i (0 <= i <= n-2)，总满足 nums[i] <= nums[i + 1]。 
//
// 
//
// 示例 1: 
//
// 
//输入: nums = [4,2,3]
//输出: true
//解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
// 
//
// 示例 2: 
//
// 
//输入: nums = [4,2,1]
//输出: false
//解释: 你不能在只改变一个元素的情况下将其变为非递减数列。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 10 ^ 4 
// - 10 ^ 5 <= nums[i] <= 10 ^ 5 
// 
// Related Topics 数组 
// 👍 627 👎 0

package com.cute.leetcode.editor.cn;
public class NonDecreasingArray {
    public static void main(String[] args) {
        Solution solution = new NonDecreasingArray().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * 从后向前遍历，看是否是一个递减数列
         * 如果不递减的话需要进行判断，如果i-1处的值比i+1处还大，那么i-1处的值最大只能为i处的值
         * 否则i-1处不用进行操作（因为这是将i处置为i-1就行了，但是没必要）
         * 做一个标记，第二次进入直接返回false
         */
        public boolean checkPossibility(int[] nums) {
            boolean flag = true;
            for (int i = nums.length-1; i >0 ; i--) {
                if (nums[i]<nums[i-1]){
                    if (!flag) return false;
                    flag = false;
                    if (i!=nums.length-1&&nums[i-1]>nums[i+1])nums[i-1] = nums[i];
                }
            }
            return true;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}